import Config from '../config/config';
import {Message} from 'element-ui';
import router from "../router";
import axios from 'axios';
import store from '../store';

// 默认登录的人 去登录【含过期】
const to_login = () => {
	localStorage.clear();
	router.push({path: '/login'});
}
/**
 * 实例化后，发送网络请求格式：
 * axios({
 *  method: 'post',
 *  url: 'getRegion'
 *  data: {}
 * })
 *
 * axios.get(url)       //get方式发起请求
 * axios.post(url, {data})      //post 方式发起请求，第二个参数为传参
 *
 */

export default () => {
	//1、创建 axios 的实例
	const instance = axios.create({
		baseURL: Config.serverURL,
		timeout: 1000 * 10
	});

	instance.defaults.headers['Content-Type'] = 'text/plain';
	//2、请求拦截器
	instance.interceptors.request.use(config => {
		/*
		//如果是post请求方式的会，需要对请求参数做处理，因为 axios 实际需要传的参数是 字符串 & 格式
		if(config.method === 'post'){
				return   config.data = qs.stringify(config.data)
		}
		*/
		//这里用可变传参的方式来，
		// Object.keys(config[1]).length > 0   &&  (configp[1] = qs.stringify(config[1]));
		//封装获取token令牌
		//   headers: {
		//     'Content-Type':'application/json;charset=utf8'
		//   },
		let data = JSON.parse(JSON.stringify(config.data));
		if (config.data && config.data.isFile) {
			var formData = new FormData();
			formData.append("token", store.state.token);
			delete config.data.isFile;

			for (var key in config.data) {
				formData.append(key, config.data[key]);
			}
			config.data = formData;
		} else {
			config.data = {
				token: store.state.token,
				data: {
					...data
				}
			};
		}
		return config
	}, err => {
		Message.error(err);
	});

	// return  instance;

	//3、响应拦截器
	instance.interceptors.response.use(res => {
		//处理响应回来的数据，过滤掉 header 等网络信息，只获取后台 api 传回来的data 数据
		let get_data = res.data;
		if (parseInt(get_data.code) == 999 || parseInt(get_data.code) == 400) {
			// Message.error(get_data.msg);
			to_login();
		}

		if (get_data.code == 'token_missing') {
			// Message.error(get_data.msg);
			to_login();
		}
		return get_data;
	}, err => {
		Message.error(err);
	});

	//4、发送真正的网络请求
	return instance;
}
